package com.example.zhangpeng.scrollrecyclerview.view;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.ScrollView;

/**
 * Created by zhangpeng on 2017/4/28.
 */

public class MyScrollView extends ScrollView {

    private boolean isScrolledToTop = true; // 初始化的时候设置一下值
    private boolean isScrolledToBottom = false;
    public MyScrollView(Context context) {
        super(context);
    }

    public MyScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        switch (ev.getAction()){
            case MotionEvent.ACTION_DOWN :
//                getParent().requestDisallowInterceptTouchEvent(true);
                break;
            default:
                break;
        }
        return super.onTouchEvent(ev);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        if(ev.getAction()==MotionEvent.ACTION_DOWN ){
//            if(isScrolledToBottom()){
//                return false;
//            }else {
//                return true;
//            }
        }else if(ev.getAction()== MotionEvent.ACTION_MOVE ){
//            if(isScrolledToBottom()||isScrolledToTop()){
//                return false;
//            }else {
//                return true;
//            }
        }else if(ev.getAction()==MotionEvent .ACTION_UP ||(ev.getAction()==MotionEvent .ACTION_CANCEL)){
//            return false;
        }
//        switch (ev.getAction()){
//            case MotionEvent.ACTION_DOWN :
//                break;
//            case MotionEvent.ACTION_MOVE :
//                if(isScrolledToBottom()||isScrolledToTop()){
//                    return false;
//                }else {
//                    return true;
//                }
//            case MotionEvent .ACTION_UP :
//              return false;
//            case MotionEvent.ACTION_CANCEL :
//                return false;
//            default:
//                break;
//        }
        return super.onInterceptTouchEvent(ev);
    }



    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        super.onScrollChanged(l, t, oldl, oldt);
            if (getScrollY() == 0) {    // 小心踩坑1: 这里不能是getScrollY() <= 0
                isScrolledToTop = true;
                isScrolledToBottom = false;
            } else if (getScrollY() + getHeight() - getPaddingTop() - getPaddingBottom() == getChildAt(0).getHeight()) {
                // 小心踩坑2: 这里不能是 >=
                // 小心踩坑3（可能忽视的细节2）：这里最容易忽视的就是ScrollView上下的padding　
                isScrolledToBottom = true;
                isScrolledToTop = false;
            } else {
                isScrolledToTop = false;
                isScrolledToBottom = false;
            }
            notifyScrollChangedListeners();
    }

    private ISmartScrollChangedListener mSmartScrollChangedListener;

    /** 定义监听接口 */
    public interface ISmartScrollChangedListener {
        void onScrolledToBottom();
        void onScrolledToTop();
    }

        private void notifyScrollChangedListeners() {
            if (isScrolledToTop) {
                if (mSmartScrollChangedListener != null) {
                    mSmartScrollChangedListener.onScrolledToTop();
                }
            } else if (isScrolledToBottom) {
                if (mSmartScrollChangedListener != null) {
                    mSmartScrollChangedListener.onScrolledToBottom();
                }
            }
        }

        public boolean isScrolledToTop() {
            return isScrolledToTop;
        }

        public boolean isScrolledToBottom() {
            return isScrolledToBottom;
        }
}
